package cn.bugstack.chatgpt.data.domain.weixin.service.Handler.Impl;

import cn.bugstack.chatgpt.data.domain.weixin.model.entity.MessageTextEntity;
import cn.bugstack.chatgpt.data.domain.weixin.model.entity.UserBehaviorMessageEntity;
import cn.bugstack.chatgpt.data.domain.weixin.service.Handler.MessageHandler;
import cn.bugstack.chatgpt.data.types.exception.ChatGLMException;
import cn.bugstack.chatgpt.data.types.sdk.weixin.XmlUtil;
import com.google.common.cache.Cache;
import org.apache.commons.lang3.RandomStringUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

@Service
public class VerificationCodeHandler implements MessageHandler {

    @Value("${wx.config.originalid}")
    private String originalId;

    @Resource
    private Cache<String, String> codeCache;

    @Override
    public String handleMessage(UserBehaviorMessageEntity userBehaviorMessageEntity) {

        // 缓存验证码
        String isExistCode = codeCache.getIfPresent(userBehaviorMessageEntity.getOpenId());

        // 判断验证码 - 不考虑验证码重复问题
        if (StringUtils.isBlank(isExistCode)) {
            // 创建验证码
            String code = RandomStringUtils.randomNumeric(4);
            codeCache.put(code, userBehaviorMessageEntity.getOpenId());
            codeCache.put(userBehaviorMessageEntity.getOpenId(), code);
            isExistCode = code;
        }

        // 反馈信息[文本]
        MessageTextEntity res = new MessageTextEntity();
        res.setToUserName(userBehaviorMessageEntity.getOpenId());
        res.setFromUserName(originalId);
        res.setCreateTime(String.valueOf(System.currentTimeMillis() / 1000L));
        res.setMsgType("text");
        res.setContent(String.format("您的验证码为：%s 有效期%d分钟！", isExistCode, 3));
        return XmlUtil.beanToXml(res);

    }

}
